$(document).ready(function() {
    // 重新绑定按钮点击事件和其他逻辑
    bindButtonEvents()

    // 获取个人信息链接
    let userInfoLink = $("#getUserInfo")

    // 给链接添加点击事件监听器
    userInfoLink.click(function(event) {
        // 阻止默认的链接跳转行为
        event.preventDefault()

        // 发送Ajax请求获取个人信息页面的HTML代码
        let url = "/getUserInfo?UserID=" + $(".username").attr("id")
        $.get(url, function(data) {
            // 将获取到的HTML代码插入到content中
            $(".content").html(data)

            bindReturnButtonEvents()
        })
    })

    // 获取图书借阅链接
    let getUserBook = $("#getUserBook")

    // 给链接添加点击事件监听器
    getUserBook.click(function(event) {
        // 阻止默认的链接跳转行为
        event.preventDefault()

        // 发送Ajax请求获取图书借阅页面的HTML代码
        $.get("/getUserBook", function(data) {
            // 将获取到的HTML代码插入到content中
            $(".content").html(data)

            // 重新绑定按钮点击事件和其他逻辑
            bindButtonEvents()
        })
    })

})

// 封装绑定按钮点击事件和其他逻辑函数，每次使用ajax获取代码后都调用
function bindButtonEvents() {
    // 获取所有借阅按钮
    let borrowButtons = $(".book-item input[type='button']")
    let filterButton = $("#checkBookButton")

    // 绑定过滤按钮点击事件
    bindFilterButtonEvents(filterButton)

    // 遍历每个按钮
    borrowButtons.each(function() {
        let button = $(this)

        // 给借阅按钮添加点击事件监听器
        button.click(function() {
            // 弹出窗口
            showReturnTimeDialog($(this))
        })

        let remainingQuantity = parseInt(button.closest("li").prev().text())
        let totalQuantity = parseInt(button.closest("li").prev().prev().text())

        // 判断已借出数量和总数是否相等
        if (remainingQuantity === totalQuantity) {
            // 设置按钮样式为灰色
            button.css("background-color", "gray")
            // 设置鼠标指针
            button.css('cursor', 'not-allowed')
            // 禁用按钮
            button.prop("disabled", true)
        } else {
            // 恢复按钮样式为默认值
            button.css("background-color", "")
            // 恢复鼠标指针样式
            button.css('cursor', 'pointer')
            // 启用按钮
            button.prop("disabled", false)
        }
    })
}

// 弹出窗口选择归还时间
function showReturnTimeDialog(button) {
    // 获取当前时间
    let currentDate = new Date()
    // 计算归还时间范围
    let minDate = new Date(currentDate.getTime() + 24 * 60 * 60 * 1000) // 当前时间的后一天
    let maxDate = new Date(currentDate.getTime() + 8 * 24 * 60 * 60 * 1000) // 当前时间的后八天

    // 弹出窗口并要求选择归还时间
    let returnTime = window.prompt("请选择归还时间（" + minDate.toLocaleDateString() + " 到 " + maxDate.toLocaleDateString() + "）：", "")

    // 处理选择的归还时间
    if (returnTime !== null) {
        /*
        * 过滤输入的归还时间，需要符合格式且在规定的时间范围内(最低一天最多七天)
        * */

        // 获取需要的数据：用户ID、图书ID、借阅时间、归还时间
        let userID = $(".username").attr("id")
        let bookID = button.attr("id")
        let bookName = button.parent().prevAll().eq(4).text()
        const now = new Date()
        const year = now.getFullYear()
        const month = now.getMonth() + 1 // 月份从0开始，所以需要加1
        const day = now.getDate()
        let borrowTime = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`

        $.ajax({
            url: "/updateBorrowInfo",
            type: "POST",
            data: {
                "userID": userID,
                "bookID": bookID,
                "bookName": bookName,
                "borrowTime": borrowTime,
                "returnTime": returnTime
            },
            success: function (response) {
                // 请求成功，重新渲染图书借阅表
                $(".content").html(response)
                // 点击获取图书借阅链接 刷新页面
                let getUserBook = $("#getUserBook")
                getUserBook.click()
            },
            error: function (xhr, status, error) {
                // 请求失败，弹出错误信息
                alert("已经借过这本书了！")
            }
        })
    }
}

// 给个人信息页面的按钮绑定点击事件
function bindReturnButtonEvents() {
    // 获取所有归还图书按钮
    let returnButtons = $(".info-item button")
    // 遍历每个按钮
    returnButtons.each(function() {
        let button = $(this)

        // 给归还按钮添加点击事件监听器
        button.click(function() {
            // 弹出窗口询问是否要归还
            showReturnDialog($(this))
        })
    })
}

// 弹出窗口询问是否要归还
function showReturnDialog(button) {
    // 获取要归还的图书名
    let bookName = button.parent().prevAll().eq(2).text()
    // 弹出窗口询问是否要归还
    let isReturn = window.confirm("确定要归还《" + bookName + "》这本书吗？")

    // 处理选择的归还时间
    if (isReturn) {
        // 用户ID
        let userID = $(".username").attr("id")
        $.ajax({
            url: "/returnBook",
            type: "POST",
            data: {
                "userID": userID,
                "bookName": bookName
            },
            success: function (response) {
                // 请求成功，重新渲染图书借阅表
                $(".content").html(response)
                // 再次点击个人信息按钮，刷新页面
                let userInfoLink = $("#getUserInfo")
                userInfoLink.click()
            },
            error: function (xhr, status, error) {
                // 请求失败，弹出错误信息
                alert("请求失败：" + xhr.responseText)
            }
        })
    }
}

// 给筛选按钮添加点击事件
function bindFilterButtonEvents(button) {
    // 获取筛选信息
    let title = $("#book-title")
    let author = $("#book-author")
    let minPrice = $("#book-minPrice")
    let maxPrice = $("#book-maxPrice")
    button.click(function() {
        // 使用ajax发送POST请求
        $.ajax({
            url: "/getBooksByCriteria",
            type: "POST",
            data: {
                "title": title.val(),
                "author": author.val(),
                "minPrice": minPrice.val(),
                "maxPrice": maxPrice.val(),
                "isAdmin": false
            },
            success: function (response) {
                // 请求成功，重新渲染图书借阅表
                $(".content").html(response)
                // 再次绑定各类事件
                bindButtonEvents()
            }
        })
    })
}

